#pragma once

#include "Misc/EngineEditorMacros.h"
#include "Object/Object.h"
#include "Math/Color.h"
#include "EditorTheme.m.h"

class RFont;

RCLASS()
class REditorTheme : public RObject
{
    ROBJECT

public:
    REditorTheme();

    SColor BackgroundColor = SColor::FromHexRGB(0x181818);
    //background color of page
    SColor ForegroundColor = SColor::FromHexRGB(0x1F1F1F);
    SColor HighlightColor = SColor::FromHexRGB(0x0078D4);
    SColor HighlightColor_Hover = SColor::FromHexRGB(0x026EC1);

    //一般UI文本颜色
    SColor TextColor = SColor::FromHexRGB(0xCCCCCC);

    //color of spliter
    SColor SpliterColor = SColor::FromHexRGB(0x2B2B2B); 
    const float SpliterSize = 1;                                 
    const float SpliterMouseSize = 4;

    //右键菜单
    SColor ContextMenuBorderColor = SColor::FromHexRGB(0x454545);
    SColor ContextMenuBackgroundColor = SColor::FromHexRGB(0x1F1F1F);
    float ContextMenuRadius = 5;
    float ContextMenuBorderSize = 2;

    //Image button things
    SColor ImageButtonHovorColor =  SColor::FromHexRGB(0x2B2B2B);
    float ImageButtonRadius = 4;

    //text things
    SColor TextInputBackgroundColor = SColor::FromHexRGB(0x313131);
    SColor UninteractableTextColor = SColor::FromHexRGB(0x868686);
    SColor TextBackgroundColor = SColor::FromHexRGB(0x444444);

    //scrollbar things
    SColor ScrollBarColor = SColor(1,1,1,0.2f);
    SColor ScrollBarHovorColor = SColor(1,1,1,0.5f);
    //the color of the spliter at left of the vertical scrollbar
    SColor ScrollBarSpliterColor = SColor::FromHexRGB(0x080B0E);

    //ability things
    //the color of the item that is hovered
    SColor ItemHoverColor = SColor::FromHexRGB(0x2A2D2E);
    //the color of the item that is selected and lost focus
    SColor ItemSelectColor = SColor::FromHexRGB(0x37373D);
    //the boder color of the item that is selected and has focus
    SColor ItemFocusSelectedBorderColor = SColor(0,0.47,0.83,1);
    //the color of the item that is selected and has focus
    SColor ItemFocusSelectedColor = SColor::FromHexRGB(0x04395E);
    //the boder color of the item that is selected and has focus,when the item is in error state
    SColor ItemFocusSelectedBorderColorError = SColor(0.745,0.067,0,1);
    //the color of the item that is selected and lost focus,when the item is in error state
    SColor ItemSelectColorError = SColor(0.353,0.1137,0.1137,1);    

    TSharedObjectPtr<RFont> DefaultFont;


    //material graph things
    const float PinSize = 15;
    const float PinBorderSize = 2;
    SColor PinBorderColor = SColor::FromHexRGB(0x1A1A1A);
    SColor Vector1DPinColor = SColor::FromHexRGB(0xA1A1A1);
    SColor Vector2DPinColor = SColor::FromHexRGB(0x6363C7);
    SColor Vector3DPinColor = SColor::FromHexRGB(0xC7C729);
    SColor Vector4DPinColor = SColor::FromHexRGB(0x63C763);
    SColor MaterialEditableBackground = SColor::FromHexRGB(0x282828);

    //page area button things
    const float PageAreaButtonSize = 30;
    const float PageAreaButtonIconSize = 26;
    const float PageAreaButtonRadius = 4;
    const float PageAreaButtonInterval=5;


    const SColor BreakpointColor = SColor::FromHexRGB(0xE51400);
    const SColor DisabledDebugPointColor = SColor::FromHexRGB(0x848484);
    const SColor AddingBreakpointColor = SColor::FromHexRGB(0x6E1B13);
};